#define _CRT_SECURE_NO_WARNINGS 1
//应用结构体类型，编程输入4名学生的姓名和高等数学、
//大学英语、模拟电路三门课程的成绩，输出平均分最高的学生的姓名。
//输入样例 :
//zhangsan  80 90 100
//lisi 95 85 98
//wangwu 95 85 95
//zhaoliu 100 80 88
//输出样例 :
//	lisi
//#include<stdio.h>
//#define N 4 //4个人
//struct student
//{
//	char name[20];
//	float score[3];
//	float avg;
//};
//int main()
//{
//	struct student s[N] = { 0 };
//	int max = 0;
//	for (int i = 0;i < N;i++)
//	{
//		scanf("%s %f %f %f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
//		s[i].avg = (s[i].score[0] + s[i].score[1] + s[i].score[2]) / 3;
//		if(i >= 1)
//		{
//			if (s[i].avg > s[max].avg)
//			{
//				max = i;
//			}
//		}
//	}
//	printf("%s", s[max].name);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	//练习1
//	struct S1
//	{
//		char c1;
//		int i;
//		char c2;
//	};
//	printf("%d\n", sizeof(struct S1));
//	//练习2
//	struct S2
//	{
//		char c1;
//		char c2;
//		int i;
//	};
//	printf("%d\n", sizeof(struct S2));
//	//练习3
//	struct S3
//	{
//		double d;
//		char c;
//		int i;
//	};
//	printf("%d\n", sizeof(struct S3));
//	//练习4-结构体嵌套问题
//	struct S4
//	{
//		char c1;
//		struct S3 s3;
//		double d;
//	};
//	printf("%d\n", sizeof(struct S4));
//	return 0;
//}

//#include <stdio.h>
//// 默认对齐数是8
//#pragma pack(2) // 把默认对齐数改为2
//struct S
//{
//    char c1; //1
//    int i; // 4
//    char c2; // 1
//};
//#pragma pack() // 取消
//int main()
//{
//    printf("%d\n", sizeof(struct S)); //修改默认对齐数后12变为8
//    return 0;
//}

//#include <stdio.h>
//#include <stddef.h>
//struct S
//{
//    char c1; //1
//    int i; // 4
//    char c2; // 1
//};
//int main()
//{
//    printf("%d\n", offsetof(struct S, c1));//0
//    printf("%d\n", offsetof(struct S, i));//4
//    printf("%d\n", offsetof(struct S, c2));//8
//    return 0;
//}

//#include <stdio.h>
//struct S
//{
//    int data[1000];
//    int num;
//};
//struct S s = { {1, 2, 3, 4}, 1000 };
////结构体传参
//void print1(struct S s)
//{
//    printf("%d\n", s.num);
//}
////结构体地址传参
//void print2(struct S* ps)
//{
//    printf("%d\n", ps->num);
//}
//int main()
//{
//    print1(s);  //传结构体
//    print2(&s); //传地址
//    return 0;
//}
//#include <stdio.h>
//struct A
//{
//    int _a : 2;  // _a 成员占2个比特位
//    int _b : 5;  // _b 成员占5个比特位
//    int _c : 10; // _c 成员占10个比特位
//    int _d : 30; // _d 成员占30个比特位
//};
//int main()
//{
//    printf("%d\n", sizeof(struct A));
//    return 0;
//}

//枚举
//#include <stdio.h>
//enum Color//颜色
//{
//    // 枚举常量
//    RED = 3,// 赋初值为3
//    GREEN,// 不赋初值，默认随上一个枚举常量，+1为4
//    BLUE// +1为5
//};
//int main(void)
//{
//    enum Sex s = RED;
//    printf("%d\n", RED);//3
//    // RED= 3 error  不可修改
//    printf("%d\n", GREEN);//4
//    printf("%d\n", BLUE);//5
//    return 0;
//}

//#include <stdio.h>
//enum Color
//{
//    // 枚举常量
//    RED,
//    YEELOW,
//    BULE
//};
//int main(void)
//{
//    enum Color c = BULE; // 我们创建一个变量c，并将BULE赋给它
//    printf("%d\n", c);//2
//    printf("%d\n", BULE);//2
//    c = YEELOW; // 这时将YEELOW赋给它，完全没有问题
//    //BULE = 6; // error！枚举常量是不能改变的
//    printf("%d\n", c);//1
//    return 0;
//}

//#include <stdio.h>
//enum Color//颜色
//{
//    // 枚举常量
//    RED = 3,// 赋初值为3
//    GREEN,// 不赋初值，默认随上一个枚举常量，+1为4
//    BLUE// +1为5
//};
//int main(void)
//{
//    enum Sex s = RED;
//    printf("%d\n", RED);//3
//    // RED= 3 error  不可修改
//    printf("%d\n", GREEN);//4
//    printf("%d\n", BLUE);//5
//    return 0;
//}

//#include <stdio.h>
//void menu()
//{
//    printf("*****************************\n");
//    printf("**    1. add     2. sub    **\n");
//    printf("**    3. mul     4. div    **\n");
//    printf("**         0. exit         **\n");
//    printf("*****************************\n");
//}
//enum Option
//{
//    EXIT, // 0
//    ADD,  // 1
//    SUB,  // 2
//    MUL,  // 3
//    DIV,  // 4
//};
//int main()
//{
//    int input = 0;
//    do
//    {
//        menu();
//        printf("请选择:> ");
//        scanf("%d", &input);
//        switch(input)
//        {
//        case ADD: // 替换后就好多了，代码的可读性大大增加
//            printf("+\n");
//            break;
//        case SUB:
//            printf("-\n");
//            break;
//        case MUL:
//            printf("*\n");
//            break;
//        case DIV:
//            printf("/\n");
//            break;
//        case EXIT:
//            printf("退出程序\n");
//            break;
//        default:
//            printf("选择错误，重新选择\n");
//            break;
//        }
//    } while (input);
//    return 0;
//}

//#include <stdio.h>
//int check_sys()
//{
//    union U {
//        char c;
//        int i;
//    } u;
//    u.i = 1;
//    return u.c;//此时c和i共用字节，而c在i的第一个字节上
//    // 返回1 就是小端
//    // 返回0 就是大端
//}
//int main()
//{
//    int ret = check_sys();
//    if (ret == 1)
//        printf("小端\n");
//    else
//        printf("大端\n");
//    return 0;
//}

//练习
//#include<stdio.h>
//#pragma pack(4)/*编译选项，表示4字节对齐 平台：VS2013。语言：C语言*/
//int main(int argc, char* argv[])
//{
//    struct tagTest1
//    {
//        short a;  // 2
//        char d;   // 1 
//        long b;   //4
//        long c;   //4  2+1+1(浪费)+4+4=12
//    };
// 
//    struct tagTest2
//    {
//        long b;  //4
//        short c;  //2
//        char d;   //1
//        long a;   //4   4+2+1+1(浪费)+4=12
//    };
// 
//    struct tagTest3
//    {
//        short c;  //2
//        long b;   //4
//        char d;   //1
//        long a;   //4   2+2(浪费)+4+1+3(浪费)+4=16
//    };
//    struct tagTest1 stT1;
//    struct tagTest2 stT2;
//    struct tagTest3 stT3;
//
//    printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));
//    return 0;
//}
//#pragma pack()

//#include<stdio.h>
//typedef struct
//{
//  int a;  //4
//  char b;  //1
//  short c;   //2
//  short d;  //2    4+1+1(浪费)+2+2+2(浪费)=12
//}AA_t;
//int main()
//{
//	printf("%d\n", sizeof(AA_t));
//	return 0;
//}

//#include<stdio.h>
//#include<string.h>
//int main()
//{
//    unsigned char puc[4];
//    struct tagPIM
//    {
//        unsigned char ucPim1;
//        unsigned char ucData0 : 1;
//        unsigned char ucData1 : 2;
//        unsigned char ucData2 : 3;
//    }*pstPimData;
// 
//    pstPimData = (struct tagPIM*)puc;
//    memset(puc, 0, 4);
//    pstPimData->ucPim1 = 2;
//    pstPimData->ucData0 = 3;
//    pstPimData->ucData1 = 4;
//    pstPimData->ucData2 = 5;
//    printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
//    return 0;
//}
//
//#include <stdio.h>
//union Un
//{
//	short s[7];   //2*7=14
//	int n;   //4
//};
//int main()
//{
//	printf("%d\n", sizeof(union Un));//16  共用，且默认对齐数是4
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//    union
//    {
//        short k;//2
//        char i[2];//2       //低地址    高地址
//    }*s, a;                 //i[0]      i[1]
//    s = &a;                 //一个空间  一个空间
//    s->i[0] = 0x39;         //0x39      一个空间
//    s->i[1] = 0x38;         //0x39      0x38
//    printf("%x\n", a.k);    //3839 （小端存储）（地位放在低地址，高位放在高地址）
//    return 0;
//}

//#define MAX_SIZE A+B
//struct _Record_Struct
//{
//	unsigned char Env_Alarm_ID : 4;
//	unsigned char Para1 : 2;
//	unsigned char state;
//	unsigned char avail : 1;
//}*Env_Alarm_Record;
//struct _Record_Struct* pointer = (struct _Record_Struct*)malloc
//(sizeof(struct _Record_Struct) * MAX_SIZE);

#include<stdio.h>
enum ENUM_A
{
	X1,      //0
	Y1,      //1
	Z1 = 255,  //255
	A1,        //256
	B1,        //257
};
int main()
{
	enum ENUM_A enumA = Y1;
	enum ENUM_A enumB = B1;
	printf("%d %d\n", enumA, enumB);//  1 257
	return 0;
}